package com.deliccio.entitys;



import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.deliccio.connect.Entidad;
import com.deliccio.util.Constantes;

@Entity
@Table(name = "producto")
@Inheritance(strategy=InheritanceType.JOINED)
public class Producto implements Entidad, Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Basic(optional = false)
    @Column(name = "idproducto", nullable = false)
    private Integer id;
    @Column(name = "nombre", length = 20)
    private String nombre;
    @Column(name = "descripcion", length = 20)
    private String descripcion;
    @Column(name = "stock")
    private Integer stock;
    @Column(name = "codigo", length = 20)
    private String codigo;
    @Column(name = "precioUnitario", precision = 22)
    private Double precioUnitario;
    @Column(name = "precioConjunto", precision = 22)
    private Double precioConjunto;
    @Column(name = "completo", length = 20)
    private Boolean completo;
    @JoinColumn(name = "idestado")
    @ManyToOne
    private Estadosgenerales estadosgenerales;
    @JoinColumn(name = "idfoto")
    @ManyToOne
    private Foto foto;    
    @ManyToOne
    @JoinColumn(name = "idtipo")
    private Parametros idtipo;      
    @OneToMany(mappedBy = "producto", cascade=javax.persistence.CascadeType.ALL)
	private List<DetalleProducto> detalleproductos;
	@OneToMany(mappedBy="producto")
	private List<DetallePedido> detallePedidos;

	private transient Boolean act;
	
	
    public List<DetallePedido> getDetallePedidos(){
		return detallePedidos;
	}
	public void setDetallePedidos(List<DetallePedido> detallePedidos){
		this.detallePedidos=detallePedidos;
	} 
	public Producto() {    	
    }
 

	public Producto(String nombre,String descripcion,Integer stock,String codigo,Double precioUnitario,Double precioConjunto,Estadosgenerales estadosgenerales,Foto foto,Parametros idtipo){
		
		this.nombre=nombre;
		this.descripcion=descripcion;
		this.stock=stock;
		this.codigo=codigo;
		this.precioUnitario=precioUnitario;
		this.precioConjunto=precioConjunto;
		this.estadosgenerales=estadosgenerales;
		this.foto=foto;
		this.idtipo=idtipo;
	}
	
	
	
	public Producto(Integer id,String nombre){
		super();
		this.id=id;
		this.nombre=nombre;
	}
	
	public Producto(Integer id,String nombre,Estadosgenerales estadosgenerales, Boolean completo){
		super();
		this.id=id;
		this.nombre=nombre;
		this.estadosgenerales=estadosgenerales;
		if(estadosgenerales.getId()==Constantes.ESTADO_ACTIVO){
			act = true;
		}else{
			act = false;
		}	
		if(completo==null){
			completo=false;
		}		
		this.completo=completo;
		System.out.println("estadosgenerales.getId():"+estadosgenerales.getId());
		System.out.println("act:"+act);
	}
	
	public Boolean getAct(){
		return act;
	}
	public void setAct(Boolean act){
		this.act=act;
	}
	public Integer getId(){
		return id;
	}
	public void setId(Integer id){
		this.id=id;
	}
	public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public String getCodigo() {
        return codigo;
    }
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
    public Double getPrecioUnitario() {
        return precioUnitario;
    }
    public void setPrecioUnitario(Double precioUnitario) {
        this.precioUnitario = precioUnitario;
    }
    public Double getPrecioConjunto() {
        return precioConjunto;
    }
    public void setPrecioConjunto(Double precioConjunto) {
        this.precioConjunto = precioConjunto;
    }

    public Estadosgenerales getEstadosgenerales() {
        return estadosgenerales;
    }
    public void setEstadosgenerales(Estadosgenerales estadosgenerales) {
        this.estadosgenerales = estadosgenerales;
    }
   
    public Foto getFoto() {
        return foto;
    }
    public void setFoto(Foto foto) {
        this.foto = foto;
    }
	public Parametros getIdtipo(){
		return idtipo;
	}
	public void setIdtipo(Parametros idtipo){
		this.idtipo=idtipo;
	}
	public List<DetalleProducto> getDetalleproductos(){
		return detalleproductos;
	}
	public void setDetalleproductos(List<DetalleProducto> detalleproductos){
		this.detalleproductos=detalleproductos;
	}


	  public Boolean getCompleto(){
		return completo;
	}
	public void setCompleto(Boolean completo){
		this.completo=completo;
	}
	@SuppressWarnings("rawtypes")
		@Override
		public String toString() {
			String toString = "[";
			@SuppressWarnings("unused")
			String campo,iscampo = "";
			try {
				Class clase = this.getClass();
				Method[] metodos = clase.getDeclaredMethods();
				for (Method met:metodos) {					
					if (met.getName().indexOf("get") >= 0) {
						toString += met.getName()+"="+met.invoke(this, null)+" - ";
					}
				}								
				toString+="]";
			} catch (Exception e) {			
				System.out.println(e);
			}
			return toString;
		}
	
}
